﻿#define _CRT_SECURE_NO_WARNINGS

#define NDEBUG
#include<assert.h>

#include<stdio.h>

//int main()
//{
//	int a = 10;
//	int b = 20;
//	int* const p = &a;
//	//p = &b;  //erro
//	*p = 100;
//	printf("%d\n", a);
//	//const修饰指针变量时，如果放在*的右边，则指针变量的本身内容不能发生改变，指向的内容（*p）可以发生改变
//
//	return 0;
//}


//int main()
//{
//	int a = 10;
//	int b = 20;
//	int const * p = &a;
//	p = &b;  //erro
//	*p = 100;
//	printf("%d\n", a);
//	//const修饰指针变量时，如果放在*的左边，则指针变量本身的内容能发生改变，指向的内容（*p）不可以发生改变
//
//	return 0;
//}


//int main()
//{
//	//打印数组当中的10个元素
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	for (int i = 0; i < sz; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//
//	return 0;
//}


//int main()
//{
//	//打印数组当中的10个元素
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	int* p = arr;
//	//int * p = &arr[0];
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	for (int i = 0; i < sz; i++)
//	{
//		printf("%d ", *p);
//		p++;
//	}
//
//	return 0;
//}

//int main()
//{
//	//打印数组当中的10个元素
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	int* p = arr;
//	//int * p = &arr[0];
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	for (int i = 0; i < sz; i++)
//	{
//		printf("%d ", *(p+i));
//	}
//
//	return 0;
//}


//int main()
//{
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	printf("%zd\n", &arr[9] - &arr[0]);
//
//	return 0;
//}

//int my_strlen(char* str)
//{
//	int count = 0;
//	while (*str != '\0')
//	{
//		count++;
//		str++;
//	}
//	return count;
//}

//int my_strlen(char* str)
//{
//	char* start = str;
//	while (*str != '\0')
//	{
//		str++;
//	}
//	return str - start;
//}
//
//int main()
//{
//	char ch[] = "abcdef";
//	printf("%d\n", my_strlen(ch));
//
//	return 0;
//}


//int main()
//{
//	//指针的关系运算
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	int* p = arr;
//	while(p < arr + sz)
//	{
//		printf("%d ", *p);
//		p++;
//	}
//
//
//	return 0;
//}

//int main()
//{
//	int a = 10;
//	int* p = NULL;
//	assert(p != NULL);
//
//	return 0;
//}


//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	assert(n > 3);
//
//	return 0;
//}

//int my_strlen(const char* str)
//{
//	int count = 0;
//	while (*str != '\0')
//	{
//		count++;
//		str++;
//	}
//	return count;
//}
//
//int main()
//{
//	char ch[] = "abcdef";
//	printf("%d\n", my_strlen(ch));
//
//	return 0;
//}
//	
//

//void Swap1(int x, int y)
//{
//	int temp = 0;
//	temp = x;
//	x = y;
//    y = temp;
//	
//}
//
//int main()
//{
//	int a = 0;
//	int b = 0;
//	scanf("%d %d",&a, &b);
//	printf("修改前：a=%d b=%d\n", a, b);
//	Swap1(a, b);//传值调用
//	//形参会生成一个单独的空间来接受形参
//	//对形参的改变并不会影响实参
//	printf("修改后：a=%d b=%d\n", a, b);
//	return 0;
//}


//void Swap2(int* x, int* y)
//{
//	int temp = 0;
//	temp = *x;
//	*x = *y;
//	*y = temp;
//
//}
//
//int main()
//{
//	int a = 0;
//	int b = 0;
//	scanf("%d %d", &a, &b);
//	printf("修改前：a=%d b=%d\n", a, b);
//	Swap2(&a,&b);//传址调用
//	//形参会生成一个单独的空间来接受形参
//	//对形参的改变并不会影响实参
//	printf("修改后：a=%d b=%d\n", a, b);
//	return 0;


//int main()
//{
//
//	//数组名是数组首元素的地址
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	printf("arr[0] = %p\n", &arr[0]);//数组首元素的地址
//	printf("&arr    = %p\n", &arr);
//	printf("&arr    = %p\n", &arr);//数组的地址
//
//	return 0;
//}


//int main()
//{
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	printf("&arr[0]   = %p\n", &arr[0]);
//	printf("&arr[0]+1 = %p\n", &arr[0] + 1);
//	printf("arr       = % p\n", arr);       //数组名是数组首元素的地址
//	printf("arr+1     = % p\n", arr + 1);
//	printf("&arr      = % p\n", &arr);
//	printf("&arr+1    = % p\n", &arr + 1);
//	return 0;
//}


int main()
{

	//使⽤指针访问数组

	return 0;
}


